package org.camelwatch.api.endpoint; import java.io.StringReader; import java.util.Collections; import java.util.List; import javax.management.MBeanInfo; import javax.management.MBeanServerConnection; import javax.management.ObjectInstance; import org.camelwatch.api.MessageFactory; import org.jdom2.Document; import org.jdom2.Element; import org.jdom2.input.SAXBuilder; import org.camelwatch.api.Message; /** * @author Stephen K Samuel samspade79@gmail.com 1 Jul 2012 21:19:17 * */ public class EndpointOperationsJmxImpl implements EndpointOperations { private final MBeanServerConnection conn; private final ObjectInstance instance; private final MBeanInfo info; public EndpointOperationsJmxImpl(MBeanServerConnection conn, ObjectInstance instance, String consumerId, MBeanInfo info) { this.conn = conn; this.instance = instance; this.info = info; } @Override public String browseExchange(int offset) throws Exception { Object result = conn.invoke(instance.getObjectName(), "browseExchange", new Object[] { offset }, new String[] { "java.lang.Integer" }); return (String) result; } @Override public Message browseMessageAsXml(int offset, boolean includeBody) throws Exception { String result = (String) conn.invoke(instance.getObjectName(), "browseMessageAsXml", new Object[] { offset }, new String[] { "java.lang.Integer" }); if (result == null) return null; Document doc = new SAXBuilder().build(new StringReader(result)); Element root = doc.getRootElement(); return new MessageFactory().build(root); } @Override public String browseMessageBody(int offset) throws Exception { Object result = conn.invoke(instance.getObjectName(), "browseMessageBody", new Object[] { offset }, new String[] { "java.lang.Integer" }); return (String) result; } @Override public List<Message> browseRangeMessagesAsXml(int offset, int end, boolean includeBody) throws Exception { String result = (String) conn.invoke(instance.getObjectName(), "browseRangeMessagesAsXml", new Object[] { offset, end, includeBody }, new String[] { "java.lang.Integer", "java.lang.Integer", "java.lang.Boolean" }); if (result == null) return Collections.EMPTY_LIST; Document doc = new SAXBuilder().build(new StringReader(result)); List<Message> results = new MessageFactory().buildList(doc); return results; } @Override public long queueSize() throws Exception { try { Object result = conn.invoke(instance.getObjectName(), "queueSize", new Object[0], new String[0]); return (Long) result; } catch (Exception e) { return 0; } } }